# #  创建集合
# # 用{}
# s={1,2,3,4}
# # 用set
# ss=set("1234")
# print(type(s))
# print(type(ss))
# #  集合的添加和删除
# # 添加
# s.add(6)
# print(s)
# # 删除第一个
# s.pop()
# print(s)
# # 自定义删除
# s.remove(4)
# print(s)
#
# #创建元组
# #空
# tuple1 = ()
# print(tuple1)
# # 有元素的元组
# tuple2 = (1,"a",3,"hello",2.2)
# print(tuple2)
# # 只有1个元素
# tuple3 = (1,)
# print(tuple3)
# # 从开始索引开始截取 截止到结束索引之前
# tuple1 = ("h","e","l","l","o")
# # 使用索引从0开始
# print(tuple1[2])
# # 使用负数
# print(tuple1[-4])
# # 使用切片
# # 正
# print(tuple1[1:4])
# # 指定步长
# print(tuple1[1:4:2])
# # 使用负数
# print(tuple1[-5:-1])

# # 修改元组元素
# from typing import Tuple, List
#
# tuple1 = (12, 34, 56)
# tuple2 = ('abc', 'mn')
# # 修改元组元素操作是非法的
# # tuple1[0] = 100
# # tuple2[0] = 200
# # 连接元组创建一个新的元组，两个数据必须都是元组
# tuple3 = tuple1 + tuple2
# print(tuple3)
#
# # 删除元组，关键字del
# t1 = (1, 2, 3, [4, 5, 6])
# print(t1)
# del t1
# print(t1)
# # 任务
# # 使用input方法输入联系人姓名，电话，邮件，地址：
# # 定义元组tuple1存储上述信息
# # 输出tuple1
# n = input('请输入联系人姓名：')
# t = input('请输入13位手机号码：')
# e = input('请输入邮箱地址：')
# a = input('请输入联系地址')
# tuple1 = ("姓名：", n, "电话：", t,"邮箱：", e, "地址：", a)
# print(tuple1)
#
# # """ 列表"""
# # 列表的创建
# # 1，使用[]
# list1 = [1, "hello", 2, "c语言"]
# print(list1)
# print(type(list1))
# # 创建一个空列表
# list2 = []
# print(list2)
#
# # 1,转化字符串
# l3 = list("hello")
# print(l3)
#
# # 2,转化元组
# t1 = tuple("hello")
# l4 = list(t1)
# print(l4)
#
# # 3,转化range函数
# r1 = range(5)  # 0, 1, 2, 3, 4
# print(r1)
# l5 = list(r1)
# print(l5)
#
#
# # 访问列表中的元素
# l1 = [1, 2, 3, '8', 'p', 'q']
# # 使用正数索引进行访问，访问p
# print(l1[4])
# # 使用负数索引进行访问，访问p
# print(l1[-2])
#
#
# # 使用切片形式访问列表中的元素
# l2 = ['a', 's', 'd', 'f', 1, 2, 3]
# # 正向数值
# # 使用正切片取出索引2， 3， 4的元素
# print(l2[2:5])
# # 正切片取前三个元素
# print(l2[:3])
# # 正切片取后三个元素
# print(l2[4:])
# # 使用正切片，取索引1-5的元素，步长为2
# print(l2[1:6:2])
# # 负向数值
# # 使用负切片形式取出s, d, f
# print(l2[-6:-3])
# # 步长为负数的话，取值从右到左，常用在排序上边，倒序形式
# print(l2[::-1])
#
# # 遍历列表
# # 使用for循环遍历列表
# l3 = ['q', 'python', 'go']
# for i in l3:
#     print(i)
#
# # 修改列表元素
# # 修改单个元素
# l4 = [10, 56, 34, 2, 56, 44, 7]    # 赋值=
# # 将索引为2的元素值改为100
# l4[2] = 100
# # 修改多个元素
# l5 = [10, 56, 34, 2, 56, 44, 7]
# # 修改第 1-4 个元素的值（不包括第4个元素）
# l5[1:4] = [45, -56, 98]
# print(l5)
#
#
# # 列表中添加元素
# # 1， append()用于在列表的末尾追加元素
# l6 = ['a', 'b', 'c', 'f']
# print(l6)
# # 列表添加列表
# l6.append(['e', 'f'])
# print(l6)
#
# # 2, extend()在列表末尾一次添加多个元素
# l7 = ['a', 'b', 'c']
# l7.extend('d')
# print(l7)
# # 列表添加列表
# l7.extend(['e', 'f', 'g', 'h'])
# print(l7)
# l7.extend('world')
# print(l7)
#
# # 3, insert()在列表中的指定位置插入元素
# l8 = ['python', 'c', 'java']
# l8.insert(2, 'go')
# print(l8)

# # 删除元素
# # 用remove（）方法删除
# l9 = ['a', 'b', 'c', 'd']
# l9.remove('a')
# print(l9)
# # 元素不在列表中运行时会报错
# # l9.remove('f')
#
# # 用pop（）方法删除
# l10 = [1, 2, 3, 5, 6, 7]
# # 删除索引为3的元素
# l10.pop(3)
# print(l10)
# # 删除最后一个元素
# l10.pop()
# print(l10)
#
# # del 可以用来删除列表中的单个元素或者一段连续的元素
# l11 = ['a', 'b', 'c', 'd', 'e']
# del l11[1]
# print(l11)   # 删除索引为1的元素
# l12 = [10, 58, 34, 2, 56, 44, 7]
# del l12[1:4]    # 1-3
# print(l12)
#
# # 用clear（）方法删除所有元素
# l13 = ['a', 'b', 'c', 'd']
# # 清空列表
# l13.clear()
# print(l13)
#
# # 任务，通讯录
# name_list = []
# phone_list = []
# while 1:
#     print("菜单：1.添加联系人 2.修改联系人 3.删除联系人")
#     chioce = input("请输入选择：")
#     # 添加联系人，包括姓名，手机号
#     if chioce == "1":
#         name_list.append(input("请输入联系人姓名："))
#         phone_list.append(input("请输入联系人手机号:"))
#         print(name_list)
#         print(phone_list)
#     # 2.修改联系人信息
#     elif chioce == "2":
#         num = int(input("请输入联系人编号："))
#         if len(name_list) > 0 and num <= len(name_list):
#             name_list[num - 1] = input("修改联系人姓名")
#             phone_list[num - 1] = input("修改联系电话")
#         else:
#             print("联系人编号输入有误")
#     # 3.删除联系人信息
#     elif chioce == "3":
#         num = int(input("请输入联系人编号："))
#         if len(name_list) > 0 and num <= len(name_list):
#             name_list.pop(num - 1)
#             phone_list.pop(num - 1)
#         else:
#             print("联系人编号输入有误")
#     else:
#         print("显示联系人信息")
#         print(name_list)
#         print(phone_list)

# # 用 inder（ ）列表名.inder 统计要查找的元素
# ls1 = [2, 3, 5, 7, 8, 'a', 0, 'b', 'a', 'b' 3]
# print(ls1.inder（3))
# print(ls1.inder('b', 6, 9))
# print(ls1.inder('a', 7))
# print(ls1.inder(12))
#
#
# # 用count( )方法统计出现的次数
# ls2 = {1, 3, 5, 7, 'a', 'b', 8, 3, 'b', 2, 5, 5, 7, 1}
# print(ls2.count(5))
# print(ls2.count(0))
# print(ls2.count('b'))
#
#
# # sort( )函数用于对原列表进行排序
# # 格式： ls.sort(Key=None, reverse=False
# # 1、元素是字符串的排序
# ls3 = ['1', '3', '44', '23', '99', '88', '56', '233']
# # 默认升序
# ls3.sort()
# print(ls3)
# # 降序 reverse=True
# ls3.sort(reverse=True)
# print(ls3)
#
# # 2、元素是数值的排序
# ls4 = [12, 34, 56, 78, 90]
# # 默认升序
# ls4.sort()
# print(ls4)
# # 降序 reverse=Ture
# ls4.sort(reverse=True)
# print(ls4)
#

# '''字典'''
# # 用{} 创建字典语法格式：
# # 使用字符串作为Key
# d1 = {'python': 90, '可视化': 89, '英语': 85}
# print(type(d1))
# # 使用元祖和数字作为Key
# d2 = {(23, 89): "great", 30: [1, 3, 4]}
# print(type(d2))
# # 创建空元组
# d3 = {}
# print(d3)
#
# # 用dict（）方法创建字典格式
# d4 = dict(数学=100, 语文=90, 英语=80)
# print(d4)

# 字典元素的访问
# 1、字典名[Key]
d5 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在,返回的值是value
print(d5['英语'])
# 键不存在，会引发一个Keyerror错误
# print(d5['python'])

# 2、get( ) 方法来获取指定键对应的值，语法格式：字典名.get(key[,default])
d6 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在
print(d6.get('语文'))
# 键存在,不写default,会返回None
print(d6.get('python'))
print(d6.get('python', '该键不存在'))

# 字典添加键值对
d7 = {'数学': 95, '英语': 92, '语文': 84, 'Python': 99}
d7['可视化'] = 99
print(d7)

# 字典修改键对值
d8 = {'数学': 95, '英语': 92, '语文': 84, 'python': 99}
d8['英语'] = 100
print(d8)

# 字典删除键值对
d9 = {'数学': 95, '英语': 92, '语文': 84, 'python': 99}
# 使用del关键字
del d9['语文']
print(d9)
# 2、使用pop（）方法
d9.pop('英语')
print(d9)




















